from multiprocessing.pool import Pool
from multiprocessing import Manager
from time import sleep

import os


def write(q):
    print('写入进程号：',os.getpid())
    for i in range(10):
        #消息队列写入数据
        q.put_nowait(i)
        print('写入数据是：',i)
        sleep(0.5)


def read(q):
    print('读取数据的进程号：',os.getpid())
    for i in range(q.qsize()):
        print('取出数据：',q.get_nowait())
        sleep(0.5)


if __name__ == '__main__':
    #创建进程池
    p1 = Pool()
    #消息队列   导包    使用的是进程池管理对象中的queue
    q = Manager().Queue()
    #调用一个进程，去写数据
    p1.apply_async(func=write,args=(q,))
    sleep(10)

    #在从进程池中调用一个进程  去读数据
    p1.apply_async(func=read,args=(q,))

    #关闭进程池  不在接受新的任务
    p1.close()
    #等待各个进程结束
    p1.join()